/*  Pattern based natural language processing tools for Estonian.
    Copyright (C) 2013 University of Tartu

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef _PATNLP_PATNLP_HPP
#define _PATNLP_PATNLP_HPP

// include standard headers used everywhere
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <utility>
#include <iterator>
#include <exception>
#include <stdexcept>
#include <limits>
#include <map>
#include <set>
#include <cmath>

namespace patnlp
{

// define basic errors thrown by exceptions
#define ERR_DOCSIZE_LESS_0 "001: Document size less than 0"
#define ERR_INVALID_COVER_ELEMENT "002: Invalid cover element."
#define ERR_MISMATCHING_DOC_SIZES "003: Document sizes differ."
#define ERR_DOC_NOT_FOUNT "004: Document not found in cover."
#define ERR_SIZE_NOT_DEFINED "005: Size not defined for document."
#define ERR_DOC_WITH_NAME_EXIST "006: Document with given name already present!"
#define ERR_COULD_NOT_READ_FILE "007: Could not read file "
#define ERR_COULD_NOT_WRITE_FILE "008: Could not write file "
#define ERR_TRESHOLD_INSANE "009: Your treshold is too low or too high to obtain any meaningul results for given data."
#define ERR_DOCUMENT_NOT_FOUND "010: Document not found"

typedef std::vector<long> LongVector;
typedef std::vector<std::string> StringVector;
typedef std::vector<bool> BoolVector;

typedef std::map<std::string, long> StringMapLong;
typedef std::map<std::string, double> StringMapDouble;
typedef std::map<std::string, LongVector> StringMapLongVector;
typedef std::map<std::string, BoolVector> StringMapBoolVector;

}

#endif
